package fr.bugtracker.entity.technique;

// Generated Apr 30, 2013 6:50:27 PM by Hibernate Tools 3.2.1.GA

import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.Table;

import org.apache.commons.lang3.builder.EqualsBuilder;
import org.apache.commons.lang3.builder.HashCodeBuilder;
import org.hibernate.annotations.LazyCollection;
import org.hibernate.annotations.LazyCollectionOption;

import fr.bugtracker.dao.technique.IdentifiableEntity;

/**
 * Profil generated by hbm2java
 */
@Entity
@Table(name = "profil")
public class Profil implements IdentifiableEntity {

	/**
	 * identifiant unique
	 */
	@Id
	@Column(name = "id", unique = true, nullable = false)
	private Integer id;
	/**
	 * libellé du profil
	 */
	@Column(name = "libelle", nullable = false, length = 50)
	private String libelle;
	/**
	 * définis si le profil est le profil par défaut
	 */
	@Column(name = "defaut")
	private boolean defaut;
	/**
	 * défini si le profil a les droits type administrateur
	 */
	@Column(name = "administrateur")
	private boolean administrateur;
	/**
	 * la liste des roles associés au profil
	 */
	@LazyCollection(LazyCollectionOption.TRUE)
	@ManyToMany(cascade = CascadeType.ALL)
	@JoinTable(name = "profil_role", joinColumns = { @JoinColumn(name = "ref_profil", nullable = false, updatable = false) }, inverseJoinColumns = { @JoinColumn(name = "ref_role", nullable = false, updatable = false) })
	private List<Role> listeRole;

	/**
	 * Constructeur de la classe <code>Profil</code>.
	 */
	public Profil() {
	}

	/**
	 * <p><b>Accès en lecture à l'attribut id.</b></p>
	 * @return Retourne l'attribut id sous forme de <code>Integer</code>.
	 */
	public Integer getId() {
		return this.id;
	}

	/**
	 * <p><b>Accès en écriture à l'attribut id.</b></p>
	 * @param id L'attribut id à modifier.
	 */
	public void setId(Integer id) {
		this.id = id;
	}

	/**
	 * <p><b>Accès en lecture à l'attribut libelle.</b></p>
	 * @return Retourne l'attribut libelle sous forme de <code>String</code>.
	 */
	public String getLibelle() {
		return this.libelle;
	}

	/**
	 * <p><b>Accès en écriture à l'attribut libelle.</b></p>
	 * @param libelle L'attribut libelle à modifier.
	 */
	public void setLibelle(String libelle) {
		this.libelle = libelle;
	}

	/**
	 * <p><b>Accès en lecture à l'attribut defaut.</b></p>
	 * @return Retourne l'attribut defaut sous forme de <code>boolean</code>.
	 */
	public boolean isDefaut() {
		return this.defaut;
	}

	/**
	 * <p><b>Accès en écriture à l'attribut defaut.</b></p>
	 * @param defaut L'attribut defaut à modifier.
	 */
	public void setDefaut(boolean defaut) {
		this.defaut = defaut;
	}

	/**
	 * <p><b>Accès en lecture à l'attribut administrateur.</b></p>
	 * @return Retourne l'attribut administrateur sous forme de <code>boolean</code>.
	 */
	public boolean isAdministrateur() {
		return this.administrateur;
	}

	/**
	 * <p><b>Accès en écriture à l'attribut administrateur.</b></p>
	 * @param administrateur L'attribut administrateur à modifier.
	 */
	public void setAdministrateur(boolean administrateur) {
		this.administrateur = administrateur;
	}

	/**
	 * <p><b>Accès en lecture à l'attribut listeRole.</b></p>
	 * @return Retourne l'attribut listeRole sous forme de <code>List<Role></code>.
	 */
	public List<Role> getListeRole() {
		return this.listeRole;
	}

	/**
	 * <p><b>Accès en écriture à l'attribut listeRole.</b></p>
	 * @param listeRole L'attribut listeRole à modifier.
	 */
	public void setListeRole(List<Role> listeRole) {
		this.listeRole = listeRole;
	}

	/**
	 * @see java.lang.Object#equals(java.lang.Object)
	 */
	@Override
	public boolean equals(Object obj) {
		if (this == obj) {
			return true;
		}
		if (obj == null) {
			return false;
		}
		if (!(obj instanceof Profil)) {
			return false;
		}
		Profil other = (Profil) obj;
		return new EqualsBuilder().append(id, other.id).isEquals();
	}

	/**
	 * @see java.lang.Object#hashCode()
	 */
	@Override
	public int hashCode() {
		return new HashCodeBuilder(17, 37).append(id).toHashCode();
	}

	/**
	 * @see java.lang.Object#toString()
	 */
	@Override
	public String toString() {
		StringBuilder builder = new StringBuilder();
		builder.append("Profil [id=").append(this.id).append(", libelle=").append(this.libelle).append(", defaut=").append(this.defaut).append(", administrateur=").append(this.administrateur)
				.append(", listeRole=").append(this.listeRole).append("]");
		return builder.toString();
	}

}
